class Teacher:
    name = "来测科技讲师" # 定义的是类属性
    def __init__(self,name,age,sex):
        """
        __init__：初始化构造方法
        name：老师的姓名
        age：老师的年龄
        sex：老师的性别
        """
        self.name = name
        self.age = age
        self.sex = sex
        """
        self：表示是对象
        类里的全部方法都能找到这个对象/实例属性
        """
    def course(self):
        """
        在类里的函数，形参带有self表示是类对象可以调用的方法
        :return:
        """
        print("宛潇")
        print(self) # self表示对象本身的地址值： <__main__.Teacher object at 0x0000020E7AE44FD0>
        return 222

    def teacher_info(self):
        # 因为下面我实例化的对象，name：张三，age：19，sex：男
        # 所以 这里的self. 也就是zs的name zs的age  zs的sex
        print(f"我的名字是：{self.name},我的年龄是：{self.age}，我的性别是：{self.sex}")

    def 宛潇(self):
        print("我是宛潇方法")


if __name__ == '__main__': # 当前py文件的运行入口
    # 类当成上帝/女娲，咱们去创造对象
    # 怎么创造？
    # 类名然后传参，传的什么参？  传的是你定义好的__init__()构造方法里的参数
    # 张三 = Teacher("张三",19,"男")
    zs = Teacher("张三",19,"男")
    wx = Teacher("宛潇",20,"男")

    # 给对象加实例属性也是没有问题 但是只有wx才可以用，其他的你还需要再定义
    wx.play = "打游戏"
    # print(wx.play)

    # zs.course()
    """print(zs.name) # 调用的对象属性 张三
    print(wx.name) # 调用的对象属性 宛潇"""
    # 调用teacher_info方法
    """zs.teacher_info()
    wx.teacher_info()"""
    # 遵循先定义后使用，没有定义的类属性就会报错
    # print(Teacher.name) # 调用的是类属性
    #
    # print(Teacher.course) # 直接打印是方法的地址值

    # 通过类，直接调用方法：没有传递对象，所以报错了
    # Teacher.course() # course() missing 1 required positional argument: 'self'

    # 传一个对象，再去调用试试
    """ aaa = Teacher.course(111)
    print(aaa)"""

    # 传一个之前定义好的对象
    # Teacher.course(zs)

    # 调用宛潇
    # Teacher.宛潇(111)

    # 修改类属性的值
    # print(Teacher.name) # 来测科技讲师
    Teacher.name = "来测信息技术讲师"
    # print(Teacher.name) # 来测信息技术讲师

    # 添加类属性
    # print(Teacher.play) # AttributeError: type object 'Teacher' has no attribute 'play'
    Teacher.play = "篮球"
    # print(Teacher.play)
    # print(Teacher.__dict__) # 查看所有的类属性

    # 如果说对象本身没有这个属性的话，会读到类属性
    # print(zs.play)

    # 删除类属性
    del Teacher.play
    # print(Teacher.play) # 已经删除掉的类属性 不会再打印出来的 会报错
    # print(Teacher.__dict__)






